package com.monitor.util;

import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.PNGTranscoder;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * SVG转PNG工具类
 */
public class SvgToPngConverter {
    
    public static void main(String[] args) {
        if (args.length < 2) {
            System.out.println("Usage: SvgToPngConverter <svg-file> <png-file>");
            System.exit(1);
        }
        
        String svgPath = args[0];
        String pngPath = args[1];
        
        try {
            convertSvgToPng(svgPath, pngPath);
            System.out.println("转换成功: " + pngPath);
        } catch (Exception e) {
            System.err.println("转换失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
    
    /**
     * 将SVG文件转换为PNG文件
     * 
     * @param svgPath SVG文件路径
     * @param pngPath PNG文件输出路径
     * @throws Exception 转换过程中的异常
     */
    public static void convertSvgToPng(String svgPath, String pngPath) throws Exception {
        // 检查输入文件是否存在
        File svgFile = new File(svgPath);
        if (!svgFile.exists()) {
            throw new IOException("SVG文件不存在: " + svgPath);
        }
        
        // 确保输出目录存在
        File pngFile = new File(pngPath);
        File parentDir = pngFile.getParentFile();
        if (parentDir != null && !parentDir.exists()) {
            parentDir.mkdirs();
        }
        
        // 创建转换器
        PNGTranscoder transcoder = new PNGTranscoder();
        
        // 设置图像质量属性
        transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, 32f);
        transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, 32f);
        
        // 创建输入和输出流
        try (FileInputStream inputStream = new FileInputStream(svgFile);
             FileOutputStream outputStream = new FileOutputStream(pngFile)) {
            
            // 设置输入和输出
            TranscoderInput input = new TranscoderInput(inputStream);
            TranscoderOutput output = new TranscoderOutput(outputStream);
            
            // 执行转换
            transcoder.transcode(input, output);
        }
    }
}